#include "Col.ph"
#ifdef __GNUG__
#pragma implementation
#endif

#include "SortedOList.h"
#include "Class.h"

//---- SortedObjList -----------------------------------------------------------

NewMetaImpl0(SortedObjList,ObjList);

SortedObjList::SortedObjList(bool order)
{
	if ( order == cSortAscending )
		SetFlag(SObListAscending);
}

Object *SortedObjList::Add(Object *op)
{
	register ObjLink *lnk;
	register int cmp;

	if ( IsArgNull("Add", op) )
		return 0;

	for (lnk= head->Next(); lnk != head; lnk= lnk->Next()) {
		cmp= CompareObjects(op, lnk->GetObject());
		if ((Ascending() && cmp < 0) || (! Ascending() && cmp > 0)) {
			InsertLink(op, lnk);
			return 0;
		}
	}
	ObjList::Add(op);
	return 0;
}

Object *SortedObjList::AddFirst(Object *op)
{
	MayNotUse("AddFirst");
	return Add(op);
}

Object *SortedObjList::AddLast(Object *op)
{
	MayNotUse("AddLast");
	return Add(op);
}

Object *SortedObjList::AddBefore(Object *op, Object *)
{
	MayNotUse("AddBefore");
	return Add(op);
}

Object *SortedObjList::AddAfter(Object *op, Object *)
{
	MayNotUse("AddAfter");
	return Add(op);
}

Object *SortedObjList::AddBeforePtr(Object *op, Object *)
{
	MayNotUse("AddBeforePtr");
	return Add(op);
}

Object *SortedObjList::AddAfterPtr(Object *op, Object *)
{
	MayNotUse("AddAfterPtr");
	return Add(op);
}

Object *SortedObjList::PutAt(Object *op, int)
{
	MayNotUse("PutAt");
	return Add(op);
}

int SortedObjList::CompareObjects(Object *op1, Object *op2)
{
	return op1->Compare(op2);
}

